import { Component, Vue } from 'vue-property-decorator';
import proxy from "@/utils/data/proxy";
import { find, forEach } from "lodash";
@Component({
})
export class mixinGridStore extends Vue {
    // 预留配置-列表配置
    gridConfig: any = {
        // 列对齐方式 居中对齐
        align: "center",
        class: "grid",
        height: "100%",
        // 当内容过长时显示为省略号
        // tooltip 在火狐中有兼容问题
        showOverflow: 'title',
        // 显示边框
        border: 'full',
        // 列表头宽度调整
        resizable: true,
        // 用于支持拖拽列头
        'column-key': true,
        // 鼠标移到行是否要高亮显示
        'highlight-hover-row': true,
        // 自定义列配置项
        'custom-config': {
            // 自定义列是否允许列选中的方法，该方法 Function({column}) 的返回值用来决定这一列的 checkbox 是否可以选中
            checkMethod: (this as any).checkMethod
        },
        // 序号配置项
        'seq-config': {
            // 自定义序号的方法 Function({ row, rowIndex, column, columnIndex }) 返回处理后的值
            seqMethod: this.seqMethod
        },
        // 排序配置
        'sort-config': {
            // 是否远程排序
            remote: true
        },
        // 分页组件配置
        pageSizes: [5, 10, 20, 30],
        // 如果缓存列表页面，这样写避免切换到其他页面后再次显示布局错乱
        "auto-resize": true
    };

    // 列表
    tableList: any = { data: [], pagination: {}};

    created() {
        this.initGrid();
    }

    initGrid(storeName: string = 'tableList') {
        const me = this as any;
        proxy.init(me[storeName]);
    }

    // 加载数据方法，可在视图中重写
    // isReLoad 是否重载缓存数据
    loadView(params: any, storeName: string = 'tableList') {
        const me = this as any;
        me[storeName].refresh(params);
    }

    // 每页显示数量变化
    onSizeChange(pageSize: number) {
        this.proxySizeChange(pageSize);
    }

    // 页码发生变化
    onCurrentChange(page: number) {
        this.proxyCurrentChange(page);
    }

    // 根据条件查询
    proxyQuery(params: any, storeName = "tableList") {
        // console.log("onSizeChange", pageSize);
        const me = this as any;
        me[storeName].load(params);
    }

    // 每页显示数量变化
    proxySizeChange(pageSize: number, storeName = "tableList") {
        // console.log("onSizeChange", pageSize);
        const me = this as any;
        me[storeName].loadPageSize(pageSize);
    }

    // 页码发生变化
    proxyCurrentChange(page: number, storeName = "tableList") {
        const me = this as any;
        // console.log("onCurrentChange", page);
        me[storeName].loadPage(page);
    }

    // 处理序号
    seqMethod(row: any) {
        const me = this as any,
            proxy = me.tableList.proxy;
        return proxy.pageSize * (proxy.page - 1) + 1 + row.rowIndex;
    }

    transformList: any = [];
    disposeItem(item: any) {
        const me = this as any;
        forEach(me.transformList, function (data) {
            me.findText(item, me[data.dataName], data.keyName);
        })
    }
    findText(item: any, list: any, key: any) {
        const info = find(list, function (data) {
            return data.value.toString() == item[key].toString();
        });
        item[`${key}_label`] = info ? info.label : "";
    }
}
